package tr.persistencia; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import tr.domain.Produto; public class ProdutoDAO { private List<SalvaProdutoListener> listeners = new ArrayList<SalvaProdutoListener>(); public void addSalvaProdutoListener(SalvaProdutoListener l) { this.listeners.add(l); } // 1o passo: construtor privado // proibindo a instanciação private ProdutoDAO() { } // 2o passo: construir a si mesmo private static ProdutoDAO dao = new ProdutoDAO(); // 3o passo: fornecer um método para acesso public static ProdutoDAO getDAO() { return dao; } public void salva(Produto p) { try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost/tr", "root", "root"); Statement cmd = con.createStatement(); cmd.execute("INSERT INTO produtos (descricao) VALUES ('" + p .getDescricao() + "');", Statement.RETURN_GENERATED_KEYS); ResultSet generatedKeys = cmd.getGeneratedKeys(); if (generatedKeys.next()) { p.setId(generatedKeys.getInt(1)); for (SalvaProdutoListener l : listeners) { l.produtoSalvo(new ProdutoSalvaEvent(p)); } } else throw new RuntimeException("Produto não foi salvo"); cmd.close(); con.close(); } catch (Exception e) { throw new RuntimeException(e); } } public List<Produto> lista() { List<Produto> produtos = new ArrayList<Produto>(); try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost/tr", "root", "root"); Statement cmd = con.createStatement(); ResultSet rows = cmd.executeQuery("SELECT * FROM produtos"); while (rows.next()) { Produto p = new Produto(); p.setId(rows.getInt("id_produto")); p.setDescricao(rows.getString("descricao")); produtos.add(p); } cmd.close(); con.close(); } catch (Exception e) { throw new RuntimeException(e); } return produtos; } }